Android工作室getSlotFromBufferLocked:未知的缓冲区错误
我想做一个简单的login和注册应用程序,所以用户可以创build一个帐户。 (名称,用户名,密码)我使用WAMP和MYSQL数据库存储帐户。
当我填写registry单上的用户信息并点击注册时,出现以下错误:
09-14 09:30:39.864 2624-2638/com.example.appname.appname E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab7115e0 09-14 09:30:48.632 2624-2638/com.example.appname.appname E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab7125a0 09-14 09:30:51.940 2624-2638/com.example.appname.appname E/Surface﹕ getSlotFromBufferLocked: unknown buffer: 0xab7125a0
当我去检查数据库它没有存储帐户。
MainActivity.java
import android.app.Activity; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void userReg(View v) { startActivity(new Intent(this, Register.class)); } public void userLogin(View view) { } }
Register.java
import android.app.Activity; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; public class Register extends Activity { EditText ET_NAME,ET_USER_NAME,ET_USER_PASS; String name,user_name,user_pass; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.register_layout); ET_NAME = (EditText) findViewById(R.id.name); ET_USER_NAME = (EditText) findViewById(R.id.new_user_name); ET_USER_PASS = (EditText) findViewById(R.id.new_user_pass); } public void userReg(View view) { name = ET_NAME.getText().toString(); user_name = ET_USER_NAME.getText().toString(); user_pass = ET_USER_PASS.getText().toString(); String method = "register"; BackgroundTask backgroundTask = new BackgroundTask(Register.this); backgroundTask.execute(method,name,user_name,user_pass); finish(); } }
Backgroundtask.java
import android.app.AlertDialog; import android.content.Context; import android.os.AsyncTask; import android.widget.Toast; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; public class BackgroundTask extends AsyncTask<String, Void, String> { AlertDialog alertDialog; Context ctx; BackgroundTask(Context ctx) { this.ctx = ctx; } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(String... params) { String reg_url = "http://10.0.2.2.2/webapp/register.php"; String login_url = "http://10.0.2.2.2/webapp/login.php"; String method = params[0]; if (method.equals("register")) { String name = params[1]; String user_name = params[2]; String user_pass = params[3]; try { URL url = new URL(reg_url); HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); httpURLConnection.setRequestMethod("POST"); httpURLConnection.setDoOutput(true); OutputStream OS = httpURLConnection.getOutputStream(); BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8")); String data = URLEncoder.encode("user", "UTF-8") + "=" + URLEncoder.encode(name, "UTF-8") + "&" + URLEncoder.encode("user_name", "UTF-8") + "=" + URLEncoder.encode(user_name, "UTF-8") + "&" + URLEncoder.encode("user_pass", "UTF-8") + "=" + URLEncoder.encode(user_pass, "UTF-8"); bufferedWriter.write(data); bufferedWriter.flush(); bufferedWriter.close(); OS.close(); InputStream IS = httpURLConnection.getInputStream(); IS.close(); return "Registration Success..."; } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Void... values) { super.onProgressUpdate(values); } @Override protected void onPostExecute(String result) { Toast.makeText(ctx, result, Toast.LENGTH_LONG).show(); } }
register.php
<?php require "init.php"; $name = $_POST["user"]; $user_name = $_POST["user_name"]; $user_pass = $_POST["user_pass"]; $sql_query = "insert into user_info values('$name','$user_name','$user_pass');"; if(mysqli_query($con,$sql_query)) { //echo"<h3> Data insertion success...</h3>"; } else{ //echo "Data insertion error..".mysqli_error($con); } ?>
的init.php
<?php $db_name="myDBname"; $mysql_user = "root"; $mysql_pass = "root"; $server_name="localhost"; $con = mysqli_connect($server_name,$mysql_user,$mysql_pass,$db_name); if(!$con) { //echo"Connection Error".mysqli_connect_error(); } else { //echo"<h3> Database connection success.....</h3>"; } ?>
编辑:
这是Android中的一个错误,在稍后的版本的Marshmallow中被修复
原版的:
我相信这是具体的棉花糖。 你在使用棉花糖设备吗?
我注意到,每当我在应用程序之间切换(无所谓)或者退出应用程序,以及活动被破坏时,都会打印出这个错误。
我已经尝试在两个Nexus 5上运行相同的应用程序 – 一个运行棒棒糖和另一个棉花糖,这些日志打印只出现在棉花糖版本 – 每个应用程序,而不仅仅是我正在build设的。
不知道为什么会这样,但是我在这里打开了一个报告。
我没有具体问题的解决scheme。 但是我有类似的问题。 任何有这样的问题的人请确保你有下面的代码。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.<YOUR_XML_FILE_NAME>);
通过使用智能你可能会select下面的代码:
@Override public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { super.onCreate(savedInstanceState, persistentState); setContentView(R.layout.<YOUR_XML_FILE_NAME>); }
这对我有效
有关PersistentState的更多信息
快乐编码:)
我认为你在完成backgrounTask之前完成上下文,并且你传递的上下文不再存在。
你可以试试:
-
使用appContext:new BackgroundTask(Register.this。getApplicationContext () );
-
或者,等待BackgroundTask完成:在.execute(…)之后删除finish()并添加完成() onPostExecute
更新你的android操作系统到6.0.1。
这是在这里find的一个公开的问题。 这个问题在最近公开发布的Android 6.0.1中得到了修复。
这是相当奇怪的,但在我的情况下,我试图加载的联系人,而不是添加时出现此错误
<uses-permission android:name="android.permission.READ_CONTACTS" />
进入清单。 它消失了,只是我做到了。
所以我猜这可能是在棉花糖新权限的东西。
使用Android 6.0在我的Nexus 5上testing,在build.gradle中使用targetSdkVersion 23testing
由于该android更改权限请求(一些权限,如android.permission.READ_PHONE_STATE或android.permission.READ_CONTACTS ),当您在运行时请求这些权限,并且不要添加权限标记( <使用权限android:name =“… “/> )在清单 ,你会得到错误。
因此,只需使用旧版本的标签权限,并在新版本的运行时添加请求权限即可。