Java Android登录不工作
嗨,有人能帮我看看这个代码吗?不知道我做错了什么,但try块没有运行。相反,它会进入捕捉块Java Android登录不工作,java,android,json,login,Java,Android,Json,Login,嗨,有人能帮我看看这个代码吗?不知道我做错了什么,但try块没有运行。相反,它会进入捕捉块 public void onClick(View arg0) { //Toast.makeText(getBaseContext(), "connecting",Toast.LENGTH_SHORT).show(); // TODO Auto-generated method stub httpclient = new DefaultHttpClient(); htpost
public void onClick(View arg0) {
//Toast.makeText(getBaseContext(), "connecting",Toast.LENGTH_SHORT).show();
// TODO Auto-generated method stub
httpclient = new DefaultHttpClient();
htpost = new HttpPost("http://10.0.2.2/fanaticmobile/log_in.php");
uname= username.getText().toString();
pass= password.getText().toString();
try {
namearray = new ArrayList<NameValuePair>();
namearray.add(new BasicNameValuePair("username", uname));
namearray.add(new BasicNameValuePair("password", pass));
htpost.setEntity(new UrlEncodedFormEntity(namearray));
response= httpclient.execute(htpost);
if(response.getStatusLine().getStatusCode()==200){
entity= response.getEntity();
if(entity != null){
InputStream stream = entity.getContent();
JSONObject jresponse = new JSONObject(ConvertInput(stream));
String logged= jresponse.getString("logged");
login_err.setText(""+logged);
if(logged.equals("true")){
Toast.makeText(getBaseContext(), "Successfull",Toast.LENGTH_SHORT).show();
//String retname= jresponse.getString("name");
//String retmail= jresponse.getString("email");
}else if(logged.equals("false")){
String message=jresponse.getString("message");
Toast.makeText(getBaseContext(), message,Toast.LENGTH_SHORT).show();
}
}
}else{
}
}
catch (Exception e) {
e.printStackTrace();
Toast.makeText(getBaseContext(), "Poor Connection",Toast.LENGTH_SHORT).show();
}
}//
请告诉我这是新的,我遵循了一个教程到这一点,但我的是不工作。如果在清单文件中设置了permissioninternet就像注释中已经说明的那样,您正在主线程UI线程中运行网络操作。这不仅不鼓励长时间的操作永远不要使用主线程,而且在联网的情况下也被禁止
response= httpclient.execute(htpost)
^这是失败的
阅读谷歌官方参考资料中如何将代码移动到一个位置,并以正确的方式执行。谷歌搜索任务也会有所帮助
伪代码版本应为:
public class YourTask extends AsyncTask<Void, Void, Void>{
YourListener mListener;
public YourTask(final YourListener listener) {
mListener = listener;
}
@Override
protected Void doInBackground(final Void... params) {
// do your lengthy operation here
return null;
}
@Override
protected void onPostExecute(Void result) {
mListener.onVeryLongTaskDone();
}
public interface YourListener {
public void onVeryLongTaskDone();
}
}
我有一个建议,尝试使用AsyncHttpclient从服务器获取响应,而不需要这么长的代码
只需将jar文件包含在您的项目中,使用起来就会很简单。请从您的logcat发布异常。这将包含它为什么不工作的线索;谷歌NetworkOnMainThreadException@KenWolflogcat太长了。还有别的办法吗?@Raghunandan谢谢。有办法解决吗?我是Android开发的新手。我通常写PHPcodes@Talagbegoogle for asynctask或使用线程或新库截取google@Aswin太好了,谢谢你。我会试着给你回电话。我应该把新的jar文件放在哪个文件夹中?在libs文件夹中,如果没有,创建文件夹。告诉我它是否不起作用。嗨@ASwin S Ashok我在这里收到错误public void onfailurer可选arg0,params,字符串arg1告诉我应该使用逗号。如果这不是太多的要求,你能帮我重新考虑我的代码吗?已将jar文件下载到我的libs文件夹中。哦,当然。对不起,请从代码中删除参数。这是我的错误。嗨,请问我如何从我的php文件中检索我发送的Json对象?我真的很困惑。我试着在onsuccess函数中封装jsonObject,但它与我之前遵循的方法大不相同。现在我只想告诉用户用户名是否正确,如果正确,我就打开一个新活动。但我似乎不知道如何检索json。请
public class YourTask extends AsyncTask<Void, Void, Void>{
YourListener mListener;
public YourTask(final YourListener listener) {
mListener = listener;
}
@Override
protected Void doInBackground(final Void... params) {
// do your lengthy operation here
return null;
}
@Override
protected void onPostExecute(Void result) {
mListener.onVeryLongTaskDone();
}
public interface YourListener {
public void onVeryLongTaskDone();
}
}
(new YourTask(YourActivityName.this)).execute();
AsyncHttpClient asyncHttpClient=new AsyncHttpClient();
RequestParams params=new RequestParams();
params.put("username", uname);
params.put("password", pass);
asyncHttpClient.post("http://10.0.2.2/fanaticmobile/log_in.php", params,new AsyncHttpResponseHandler(){
@Override
public void onFailure(Throwable arg0, String arg1) {
// TODO Auto-generated method stub
super.onFailure(arg0, arg1);
}
@Override
public void onSuccess(String arg0) {
// TODO Auto-generated method stub
super.onSuccess(arg0);
}
});