从真实设备运行时,android应用程序不幸停止了

Posted

技术标签:

【中文标题】从真实设备运行时,android应用程序不幸停止了【英文标题】:android application unfortunately stopped when running from real device 【发布时间】:2013-05-13 07:27:50 【问题描述】:

嗨,我已经制作了我的第一个 android 应用程序,它有一个 web 服务,可以使用 XAMPP 连接到我本地 PC 中的 mysql DB 我可以从 Android 模拟器完美运行它,没有任何麻烦 但我需要从我的真实设备上运行,但我遇到了与数据库的连接问题

到目前为止,我已经更改了包含 Web 服务连接详细信息的文件中的 IP 地址以及 eclipse 中的 userfunction.java(这个用于用户注册和登录功能)

在手机端,我的电脑使用局域网,我的手机使用无线连接连接到同一个连接

但是当我从我的真实设备上点击登录按钮时,我在我的 logcat 中得到了这个

05-18 12:19:40.600: E/SensorManager(13663): thread start
05-18 12:19:40.725: E/SpannableStringBuilder(13663): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
05-18 12:19:40.725: E/SpannableStringBuilder(13663): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
05-18 12:19:47.695: E/JSON Parser(13663): Error parsing data org.json.JSONException: End of input at character 0 of 
05-18 12:19:47.700: E/AndroidRuntime(13663): FATAL EXCEPTION: main
05-18 12:19:47.700: E/AndroidRuntime(13663): java.lang.NullPointerException
05-18 12:19:47.700: E/AndroidRuntime(13663):    at com.mohammed.watzIslam.LoginActivity$1.onClick(LoginActivity.java:62)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at android.view.View.performClick(View.java:4211)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at android.view.View$PerformClick.run(View.java:17267)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at android.os.Handler.handleCallback(Handler.java:615)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at android.os.Looper.loop(Looper.java:137)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at android.app.ActivityThread.main(ActivityThread.java:4898)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at java.lang.reflect.Method.invokeNative(Native Method)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at java.lang.reflect.Method.invoke(Method.java:511)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
05-18 12:19:47.700: E/AndroidRuntime(13663):    at dalvik.system.NativeStart.main(Native Method)

这是保存用户 reg 位置地址的 userfunction.java。并登录网络服务器

\
public class UserFunctions 

private JSONParser jsonParser;

private static String loginURL = "http://xxxx:port#/android_login_api/";
private static String registerURL = "http://xxxx:port#/android_login_api/";

private static String login_tag = "login";
private static String register_tag = "register";

// constructor
public UserFunctions()
jsonParser = new JSONParser();


/**
* function make Login Request
* @param email
* @param password
* */
public JSONObject loginUser(String email, String password)
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", login_tag));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));
JSONObject json = jsonParser.getJSONFromUrl(loginURL, params);
// return json
// Log.e("JSON", json.toString());
return json;


/**
* function make reg. Request
* @param name
* @param email
* @param password
* */
public JSONObject registerUser(String name, String password, String email)
// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("tag", register_tag));
params.add(new BasicNameValuePair("name", name));
params.add(new BasicNameValuePair("email", email));
params.add(new BasicNameValuePair("password", password));



// getting JSON Object
JSONObject json = jsonParser.getJSONFromUrl(registerURL, params);
// return json
return json;


/**
* Function get Login status
* */
public boolean isUserLoggedIn(Context context)
DatabaseHandler db = new DatabaseHandler(context);
int count = db.getRowCount();
if(count > 0)
// user logged in
return true;

return false;


/**
* Function to logout user
* Reset Database
* */
public boolean logoutUser(Context context)
DatabaseHandler db = new DatabaseHandler(context);
db.resetTables();
return true;



有人可以指出任何错误或建议我一个解决方案

谢谢

【问题讨论】:

Error parsing data org.json.JSONException 如果它在模拟器中工作,那么我敢打赌这是一个连接问题。我要做的第一件事是从另一台电脑连接到网络服务,看看我是否能得到所有正确的响应。 JSON 错误是来自服务器的 JSON 响应长度为 0 字节 - 再次指出,连接性与来自模拟器的连接性不同。请发布连接到服务的代码。 @DarkCthulhu 但是当我上次在模拟器上运行它时没问题...我只是认为这可能是连接问题 @user2396035 这似乎很有可能。 @PreetSangha 在我的应用程序中我有注册。登录我的数据库中还有一个网站“from”的链接,所以我应该在这里发布它们的哪些代码 【参考方案1】:

添加这些包:

import android.app.ProgressDialog;
import android.os.AsyncTask;

将json声明为类成员字段:

私有 JSONObject json;

替换 JSONObject json = jsonParser.getJSONFromUrl(loginURL, params); 用这个:

new AsyncTask<Void, Void, Void>() 
    ProgressDialog progressDialog;
    @Override
    protected void onPreExecute() 
        super.onPreExecute();
        progressDialog = new ProgressDialog(SplashActivity.this);
        progressDialog.setCancelable(false);
        progressDialog.setMessage("Loading, please wait...");
        progressDialog.show();
    

    @Override
    protected Void doInBackground(Void... pms) 
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("tag", login_tag));
        params.add(new BasicNameValuePair("email", email));
        params.add(new BasicNameValuePair("password", password));
        json = jsonParser.getJSONFromUrl(loginURL, params);
        return null;
    
    protected void onPostExecute(Void result) 
        if(progressDialog.isShowing()) 
            progressDialog.dismiss();
        
        if(json != null) 
            Log.e("JSON", json.toString());
        
        else 
            Log.e("JSON", "JSON is NULL");
        
    ;
.execute();

【讨论】:

但它给了我错误 AsyncTask cannot be resolve to a type and some others 但我想这是主要原因 我已经编辑了添加包的答案。请在您的项目中包含上面的那些包。同时从 new 中正确复制整个代码以执行 AsyncTask 现在我得到了这个 SplashActivity 无法解析为类型,并且 JSONParser 类型中的方法 getJSONFromUrl(String, List) 不适用于参数 (String, Void[]) 以及在 log.e 我能做什么 @user2396035 我再次进行了更改。再次复制粘贴整个内容并将其替换为旧内容。按 ctrl+shift+o 自动导入需要的包。 我仍然收到相同的错误以及电子邮件和密码错误...但我注意到您在登录时这样做了,您要求我将其放在应该导致冲突的注册用户方法中,不是吗??

以上是关于从真实设备运行时,android应用程序不幸停止了的主要内容,如果未能解决你的问题,请参考以下文章

不幸的是,Apps已停止在某些Android设备上

不幸的是,在 Android 的 layout-land 文件中更改 .xml 时,应用程序已在物理设备上停止 [重复]

服务在真实设备上运行一段时间后停止运行(> 40 分钟)在模拟器上运行

不幸的是,“应用程序”已经停止了 Android Studio 的问题

如何从代码中找出我的 Android 应用程序是在模拟器还是真实设备上运行?

如何避免两次启动 Android 应用程序,从 Eclipse 运行到真实设备