Android应用程序在emulator中运行,但不在Android设备中运行
我花了一整天的时间通过相关研究来解决这个问题。我可以在emulator中运行我的应用程序,但不能在android设备(即三星galaxy ace 2)中运行。我在logcat中发现以下错误。非常感谢你的帮助。谢谢大家!Android应用程序在emulator中运行,但不在Android设备中运行,android,android-emulator,samsung-mobile,Android,Android Emulator,Samsung Mobile,我花了一整天的时间通过相关研究来解决这个问题。我可以在emulator中运行我的应用程序,但不能在android设备(即三星galaxy ace 2)中运行。我在logcat中发现以下错误。非常感谢你的帮助。谢谢大家! 03-20 18:40:07.340: E/AndroidRuntime(15785): FATAL EXCEPTION: main 03-20 18:40:07.340: E/AndroidRuntime(15785): java.lang.NullPointerExcepti
03-20 18:40:07.340: E/AndroidRuntime(15785): FATAL EXCEPTION: main
03-20 18:40:07.340: E/AndroidRuntime(15785): java.lang.NullPointerException
03-20 18:40:07.340: E/AndroidRuntime(15785): at com.dorji.finalproject.LoginLayout$MyAsyncTask.onPostExecute(LoginLayout.java:87)
03-20 18:40:07.340: E/AndroidRuntime(15785): at com.dorji.finalproject.LoginLayout$MyAsyncTask.onPostExecute(LoginLayout.java:1)
03-20 18:40:07.340: E/AndroidRuntime(15785): at android.os.AsyncTask.finish(AsyncTask.java:417)
03-20 18:40:07.340: E/AndroidRuntime(15785): at android.os.AsyncTask.access$300(AsyncTask.java:127)
03-20 18:40:07.340: E/AndroidRuntime(15785): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
03-20 18:40:07.340: E/AndroidRuntime(15785): at android.os.Handler.dispatchMessage(Handler.java:99)
03-20 18:40:07.340: E/AndroidRuntime(15785): at android.os.Looper.loop(Looper.java:130)
03-20 18:40:07.340: E/AndroidRuntime(15785): at android.app.ActivityThread.main(ActivityThread.java:3691)
03-20 18:40:07.340: E/AndroidRuntime(15785): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 18:40:07.340: E/AndroidRuntime(15785): at java.lang.reflect.Method.invoke(Method.java:507)
03-20 18:40:07.340: E/AndroidRuntime(15785): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
03-20 18:40:07.340: E/AndroidRuntime(15785): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:670)
03-20 18:40:07.340: E/AndroidRuntime(15785): at dalvik.system.NativeStart.main(Native Method)
主要错误代码:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new newAsyncTask().execute();
}
});
}
private class newAsyncTask extends AsyncTask<Void, Void, Void>
{
ProgressDialog Dialog;
String user = username.getText().toString();
String pass = password.getText().toString();
@Override
protected void onPreExecute() {
Dialog = ProgressDialog.show(Login.this, "processing..", "data is Loading...");
}
@Override
protected void onPostExecute(Void result) {
if(res.equals("1")){
if (Dialog.isShowing()) {
Dialog.dismiss();
}
} else{
error.setText("Sorry, wrong username and password");
Dialog.dismiss();
}
}
@Override
protected Void doInBackground(Void... params) {
ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
postParameters.add(new BasicNameValuePair("username", user));
postParameters.add(new BasicNameValuePair("password", pass));
String response = null;
try {
response = CustomHttpClient.executeHttpPost("http://10.0.2.2:8080/MainServer/LoginResponse", postParameters);
res=response.toString();
res= res.replaceAll("\\s+","");
Bundle bundle = new Bundle();
bundle.putString("param1", user);
bundle.putString("param2", pass);
Intent newIntent = new Intent(getApplicationContext(), MainActivity.class);
newIntent.putExtras(bundle);
startActivityForResult(newIntent, 0);
} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}
}
@覆盖
公共void onClick(视图v){
//TODO自动生成的方法存根
新建newAsyncTask().execute();
}
});
}
私有类newAsyncTask扩展了AsyncTask
{
进程对话;
字符串user=username.getText().toString();
字符串pass=password.getText().toString();
@凌驾
受保护的void onPreExecute(){
Dialog=ProgressDialog.show(Login.this,“正在处理…”,“正在加载数据…”);
}
@凌驾
受保护的void onPostExecute(void结果){
如果(相对等于(“1”)){
if(Dialog.isShowing()){
Dialog.dismise();
}
}否则{
error.setText(“对不起,用户名和密码错误”);
Dialog.dismise();
}
}
@凌驾
受保护的Void doInBackground(Void…参数){
ArrayList后参数=新的ArrayList();
添加(新的BasicNameValuePair(“用户名”,用户));
添加(新的BasicNameValuePair(“密码”,pass));
字符串响应=null;
试一试{
响应=CustomHttpClient.executeHttpPost(“http://10.0.2.2:8080/MainServer/LoginResponse“,后参数);
res=response.toString();
res=res.replaceAll(“\\s+”,”);
Bundle=新Bundle();
bundle.putString(“param1”,用户);
bundle.putString(“param2”,pass);
Intent newIntent=newIntent(getApplicationContext(),MainActivity.class);
newIntent.putExtras(bundle);
startActivityForResult(newIntent,0);
}捕获(例外e){
System.out.println(例如toString());
}
返回null;
}
}
您的设备无法访问“10.0.2.2:8080”,因此进入异常并从doInBackground返回null。
在onPostExecute中,您尝试在null上运行方法equals(),并获得null指针异常我不是专家,但这可能会帮助您: 1.-添加处理程序:
private Handler myHndlr = null;
2.-初始化它:
public void onClick(View v) {
myHndlr = new Handler();
//...
3.-在你的任务中使用它:
@Override
protected void onPostExecute(Void result)
{
if(res.equals("1"))
{
myHndlr.post(new Runnable(){
@Override
public void run()
{
//Code that modify items on the screen and stuff
if(Dialog.isShowing())
{
Dialog.dismiss();
}
}
});
}
//The rest of the code here...
在Android清单中,更改与设备Android版本相对应的目标sdk(targetSdkVersion)。它应该很好用 例如,Android版本4.2.2的API版本是API级别17。因此,在Android清单中更改以下内容
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
我认为您需要的是一个用于显示更改的处理程序。处理程序将允许您修改屏幕上的任何可视元素。也许这对你有帮助。@jclandero23,你能再给我举例说明一下吗。我找不到你。非常感谢,但问题是我的模拟器没有问题,它可以访问服务器。那么,你能推荐一个url替代那个吗。我也会试试其他的,只是猜测一下:这个IP在内部网络上,而你的手机不在内部网络上。可能与您的桌面连接到同一个wifi网络,isI会尝试让您知道,您能举例说明这个问题吗:03-20 20:36:49.010:E/URL(24805):>03-20 20:36:58.310:E/最后一年项目(24805):在尝试2时注册失败:java.net.ConnectException:10.0.2.2/10.0.2.2:8080-无法访问网络这意味着您无法访问目标地址。检查设备是否具有网络访问权限(打开浏览器)。10.0.2.2也是一个内部网络地址,而不是公共地址,因此请确保您所在的内部网络可以访问此IPT,非常感谢您。我试试看。