Android 无法将Json转换为int

Android 无法将Json转换为int,android,json,url,login,int,Android,Json,Url,Login,Int,我遵循这个教程 我尝试制作应用程序进行登录。当我学习本教程时,它有错误。我认为这是onProgressDialogatint success=jResponse.getInt(“用户”)的错误

我遵循这个教程

我尝试制作应用程序进行登录。当我学习本教程时,它有错误。我认为这是
onProgressDialog
at
int success=jResponse.getInt(“用户”)的错误
用于登录的url

http://192.168.10.111/user/auth/?login_id=kongkea&password=kongkea&app_id=103574020240693

(在浏览器中)登录成功时,返回json

`{
    "user": {
        "user_id": "15",
        "firstname": "kea",
        "lastname": "kong",
        "gender": null,
        "email": null,
        "picture": null,
        "total_friends": 0,
        "total_cards": 0,
        "friend_status": "SELF"
    },
    "token": "NCTak4hOqzLUMCOYkTOG1wFCqjsxI0yKM4YGGw9pa2oz8QNCNiXeWEAOBhvTOHJKAWOvXo9zy2y5Jp9MK1PuSpiT2OALXq94acWsQ1fq0axi2UCD1DENd5Kzf54JL"
}`
仪表板活动

public class DashboardActivity extends BaseActivity {

private EditText etUsername;
private EditText etPassword;
private static String appId = "103574020240693";
private ProgressDialog progressDialog;
private static final int PROGESSDIALOG_ID = 0;
private static final int SERVER_ERROR = 1;
private static final int NETWORK_ERROR = 2;
private static final int CANCELED = 3;
private static final int SUCCESS = 4; 
private String ServerResponse;
private LoginTask loginTask;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    etUsername = (EditText) findViewById(R.id.loginEmail);
    etPassword = (EditText) findViewById(R.id.loginPassword);

    Button login_button = (Button) findViewById(R.id.btnLogin);
    login_button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            if(etUsername.getText().toString().length() == 0
                    || etPassword.getText().toString().length() == 0
                    || appId.length() == 0){
                Toast.makeText(getApplicationContext(), "Please enter username and password", Toast.LENGTH_SHORT).show();
            } else {
                showDialog(PROGESSDIALOG_ID);
            }
        }
    });

    isNetworkAvailable();
}

protected Dialog onCreateDialog(int id) {
    switch(id){
    case PROGESSDIALOG_ID:
        removeDialog(PROGESSDIALOG_ID);
        progressDialog = ProgressDialog.show(DashboardActivity.this, "Authenticating", "Please wait...",true,true, new OnCancelListener() {

            @Override
            public void onCancel(DialogInterface dialog) {
                if(loginTask != null && loginTask.getStatus() != AsyncTask.Status.FINISHED)
                    loginTask.cancel(true);
            }
        });
        break;
        default: progressDialog = null;
    }
    return progressDialog;
}



@Override
protected void onPrepareDialog(int id, Dialog dialog){
    switch(id){
    case PROGESSDIALOG_ID:
        if(loginTask != null && loginTask.getStatus() != AsyncTask.Status.FINISHED)
            loginTask.cancel(true);
        loginTask = new LoginTask();
        loginTask.execute();
    }
}

class LoginTask extends AsyncTask<Void, Integer, Void>{

    @Override
    protected Void doInBackground(Void... unused) {
         try {
            ServerResponse = null;
            HttpClient httpClient = new DefaultHttpClient();
            HttpContext localContext = new BasicHttpContext();
            HttpGet httpGet = new HttpGet(getString(R.string.webserverurl)
                    +URLEncoder.encode(etUsername.getText().toString(),"UTF-8")
                    +"&password="+ URLEncoder.encode(etPassword.getText().toString(),"UTF-8")+"&app_id="+appId);
            httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Some user agent string");

            if(isCancelled()){
                publishProgress(CANCELED);
                return (null);
            }

            HttpResponse httpResponse = httpClient.execute(httpGet,localContext);
            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(),"UTF-8"));
            ServerResponse = reader.readLine();
            publishProgress(SUCCESS);
        } catch (UnknownHostException e) {
            removeDialog(PROGESSDIALOG_ID);
            e.printStackTrace();
            publishProgress(NETWORK_ERROR);
        } catch (Exception e){
            removeDialog(PROGESSDIALOG_ID);
            e.printStackTrace();
            publishProgress(SERVER_ERROR);
        }
        return null;
    }


    @Override
    protected void onProgressUpdate(Integer...errorCode){
        switch(errorCode[0]){
        case CANCELED:
            removeDialog(PROGESSDIALOG_ID);
            Toast.makeText(getApplicationContext(), "Cancel by user", Toast.LENGTH_LONG).show();
            break;
        case NETWORK_ERROR:
            removeDialog(PROGESSDIALOG_ID);
            Toast.makeText(getApplicationContext(), "Network connection error", Toast.LENGTH_LONG).show();
            break;
        case SERVER_ERROR:
            removeDialog(PROGESSDIALOG_ID);
            Toast.makeText(getApplicationContext(), "Server Error", Toast.LENGTH_LONG).show();
            break;
        case SUCCESS:
            removeDialog(PROGESSDIALOG_ID);
            try {
                if (ServerResponse != null) {
                    JSONObject jResponse = new JSONObject(ServerResponse);
                    String sMessage = jResponse.getString("user");
                    int success = jResponse.getInt("user");
                    if(success == 1){
                        DashboardActivity.this.finish();
                    } else {
                        Toast.makeText(getApplicationContext(), sMessage, Toast.LENGTH_LONG).show();
                    }
                }

            } catch (Exception e) {
                Toast.makeText(getApplicationContext(), "Server Error", Toast.LENGTH_LONG).show();
                e.printStackTrace();
            }
            break;
        }
    }

    @Override
    protected void onPostExecute(Void unused){

    }
}

 @Override
 protected void onDestroy(){
     //you may call the cancel() method but if it is not handled in doInBackground() method
     if (loginTask != null && loginTask.getStatus() != AsyncTask.Status.FINISHED)
         loginTask.cancel(true);
     super.onDestroy();
 }

}

我认为你们有问题:

String sMessage = jResponse.getString("user");
int success = jResponse.getInt("user");

假设它应该是:
intsuccess=jResponse.getInt(“用户id”)

我认为您有问题:

String sMessage = jResponse.getString("user");
int success = jResponse.getInt("user");

假设它应该是:
intsuccess=jResponse.getInt(“用户id”)

您误用了AyncTasks:首先,您应该在doInBackground内部进行解析。仅对进度条或ui进度通知使用进度。onPostExecute应该是在成功或失败时更新ui的位置

但从全球范围来看,使用AsyncTask进行联网并不是一个好主意。javadoc声明它们是为短时间运行的任务而设计的。网络不是一项短期任务

<>你应该考虑使用Android服务来实现网络请求。有一个库可以为您提供帮助:。如果您使用spring android模块或google http java客户端模块,它将帮助您创建服务并提供开箱即用的REST支持



如果你真的想继续使用AsyncTask,那么@Maxim Shoustin的答案就是你想要的。

你误用了AyncTasks:首先你应该在doInBackground内部进行解析。仅对进度条或ui进度通知使用进度。onPostExecute应该是在成功或失败时更新ui的位置

但从全球范围来看,使用AsyncTask进行联网并不是一个好主意。javadoc声明它们是为短时间运行的任务而设计的。网络不是一项短期任务

<>你应该考虑使用Android服务来实现网络请求。有一个库可以为您提供帮助:。如果您使用spring android模块或google http java客户端模块,它将帮助您创建服务并提供开箱即用的REST支持



如果您真的想继续使用AsyncTask,那么@Maxim Shoustin的答案就是您要寻找的。

user
是一个
JSONObject
而不是一个int,因此您应该检索内部
JSONObject
。答复

int success = jResponse.getInt("user");


您必须使用
userjsonobject
对象来检索所需的内容

user
JSONObject
而不是int,因此您应该检索内部
JSONObject
。答复

int success = jResponse.getInt("user");


你必须使用
userJsonObj
对象来检索你需要的内容

@Vikas你能解决我跟踪你的项目吗?你的json格式很差。你介意美化一下吗?你的json不是validJson对象@kongkea顺便说一句,
{“user”:“user_id”:“15”
似乎已损坏,因为
user
没有任何value@Snicolas我把它改成json格式already@Vikas你能解决我跟踪你的项目吗?你的json格式不好。你介意美化一下吗?你的json不是一个有效的对象!@kongkea BTW,
{“user”:“user_id”:“15”,
似乎已损坏,因为
用户
没有任何value@Snicolas我把它改成json格式already@kongkea将
{“user”:“user\u id”:“15”
替换为
{“user”:“user\u id”:“15”
@kongkea将
{“user”:“user\u id”:“15”
替换为
{“user”:“user\u id”:“15”
@Snicolas不,它没有。你应该更好地检查我的和其他的之间的区别。@Snicolas没有问题。谢谢you@blackbelt如何获取令牌的值。这是get int value
int success=userJsonObj.getInt(“user\u id”)
。这是get string value
string success=userJsonObj.getString(“firstname”)
。如何从令牌中获取值?令牌在外部json中,因此您必须使用jResponse.gerString(“令牌”)@Snicolas否。您应该更好地检查我的令牌和其他令牌之间的差异。@Snicolas没有问题。感谢you@blackbelt如何获取令牌的值。这是get int value
int success=userJsonObj.getInt(“用户id”)
。这是获取字符串值
string success=userJsonObj.getString(“firstname”)
。如何从令牌获取值?令牌位于外部json中,因此您必须使用jResponse.gerString(“令牌”)