Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android HttpUrlConnection在移动设备上不起作用,但在emulator上起作用_Android_Android Asynctask_Httprequest - Fatal编程技术网

Android HttpUrlConnection在移动设备上不起作用,但在emulator上起作用

Android HttpUrlConnection在移动设备上不起作用,但在emulator上起作用,android,android-asynctask,httprequest,Android,Android Asynctask,Httprequest,突然,我的移动设备无法再连接到本地服务器。异步任务没有执行,我就是不明白为什么。慢慢地,我变得非常绝望,因为在我看来,我没有改变任何事情来引起这一切。 例如,这是一个不起作用的后台任务 public class Login extends AsyncTask<String, Void, String>{ private String loginUrl = "http://..."; private int loginSuccess = 0; public

突然,我的移动设备无法再连接到本地服务器。异步任务没有执行,我就是不明白为什么。慢慢地,我变得非常绝望,因为在我看来,我没有改变任何事情来引起这一切。 例如,这是一个不起作用的后台任务

public class Login extends AsyncTask<String, Void, String>{
    private String loginUrl = "http://...";

    private int loginSuccess = 0;

    public String getToken(String fromJson) throws JSONException {
        JSONObject json = new JSONObject(fromJson);


        if(json.has("api_authtoken")) {
            loginSuccess = 1;
            String appToken = json.getString("api_authtoken");
            return appToken;
        }

        else {
            return json.toString();
        }
    }

    public String doInBackground(String... arg0) {

            // so that they can be closed in the finally block.
            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String authToken;

            try {
                // get logged in to get the api_authtoken
                String email = (String) arg0[0];
                String password = (String) arg0[1];

                URL url = new URL(loginUrl);

                // Create the request and open the connection
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setRequestProperty("Accept", "application/json");

                //put values of edittexts into json-Object
                JSONObject data = new JSONObject();
                try {
                    data.put("email", email);
                    data.put("password", password);
                } catch(JSONException e) {
                    Log.e("EXCEPTION", "unexpected JSON exception", e);
                    e.printStackTrace();
                }

            urlConnection.connect();
            OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
            wr.write(data.toString());
            wr.flush();

            reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;

            //read server response
            while((line = reader.readLine()) != null) {
                sb.append(line);
            }

            //receive server "answer"
            try {
                return getToken(sb.toString());
            }catch(JSONException e) {
                Log.e("LOG", "unexpected JSON exception", e);
                e.printStackTrace();
            }  finally{
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {
                        Log.e("MainActivity", "Error closing stream", e);
                    }
                }
            }

            //return sb.toString();
            return null;
        }
        catch(IOException e) {
            Log.e("LoginTask", "Error ", e);
            // If the code didn't successfully get the data, there's no point in attempting
            // to parse it.
            //forecastJsonStr = null;
            return null;
        }
    }

    public void onPostExecute(String result) {
        super.onPostExecute(result);
        //Log.v("RESULT", result);
        if(result == null) {
            CharSequence text = "no internet connection";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(MainActivity.this, text, duration);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.show();
        }

        if(loginSuccess == 0) {
            // if the request wasn't successful
            // give user a message via toast
            CharSequence text = "wrong password or user. please try again";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(MainActivity.this, text, duration);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.show();
        }

        else {
            // save token in shared preferences
            SharedPreferences tokenPref = getSharedPreferences(getString(R.string.preference_token), Context.MODE_PRIVATE);
            SharedPreferences.Editor editorToken = tokenPref.edit();
            editorToken.putString(getString(R.string.saved_auth_token), result);
            editorToken.commit();

            //save login status = 1 in shared preferences
            SharedPreferences loginPref = getSharedPreferences(getString(R.string.preference_logged_in), Context.MODE_PRIVATE);
            SharedPreferences.Editor editorLogin = loginPref.edit();
            editorLogin.putString(getString(R.string.saved_login), "1");
            editorLogin.commit();

            Intent mapsIntent = new Intent(getApplicationContext(), MapsActivity.class);
            startActivity(mapsIntent);

        }
    }
}
公共类登录扩展异步任务{
专用字符串loginUrl=”http://...";
private int loginsucess=0;
公共字符串getToken(String fromJson)抛出JSONException{
JSONObject json=新的JSONObject(fromJson);
if(json.has(“api_authtoken”)){
登录成功率=1;
String appToken=json.getString(“api_authtoken”);
返回appToken;
}
否则{
返回json.toString();
}
}
公共字符串doInBackground(字符串…arg0){
//这样就可以在finally块中关闭它们。
HttpURLConnection-urlConnection=null;
BufferedReader reader=null;
字符串authToken;
试一试{
//登录以获取api_authtoken
字符串email=(字符串)arg0[0];
字符串密码=(字符串)arg0[1];
URL=新URL(loginUrl);
//创建请求并打开连接
urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod(“POST”);
setRequestProperty(“内容类型”、“应用程序/json”);
setRequestProperty(“接受”、“应用程序/json”);
//将EditText的值放入json对象
JSONObject数据=新的JSONObject();
试一试{
数据。放入(“电子邮件”,电子邮件);
数据输入(“密码”,密码);
}捕获(JSONException e){
Log.e(“异常”,“意外JSON异常”,e);
e、 printStackTrace();
}
urlConnection.connect();
OutputStreamWriter wr=新的OutputStreamWriter(urlConnection.getOutputStream());
write(data.toString());
wr.flush();
reader=new BufferedReader(新的InputStreamReader(urlConnection.getInputStream());
StringBuilder sb=新的StringBuilder();
字符串行=null;
//读取服务器响应
而((line=reader.readLine())!=null){
某人附加(行);
}
//接收服务器“应答”
试一试{
返回getToken(sb.toString());
}捕获(JSONException e){
Log.e(“Log”,“意外JSON异常”,e);
e、 printStackTrace();
}最后{
if(urlConnection!=null){
urlConnection.disconnect();
}
if(读卡器!=null){
试一试{
reader.close();
}捕获(最终IOE例外){
Log.e(“MainActivity”,“错误关闭流”,e);
}
}
}
//使某人返回字符串();
返回null;
}
捕获(IOE异常){
Log.e(“登录任务”,“错误”,e);
//如果代码没有成功获取数据,那么尝试就没有意义了
//来解析它。
//forecastJsonStr=null;
返回null;
}
}
public void onPostExecute(字符串结果){
super.onPostExecute(结果);
//Log.v(“结果”,结果);
如果(结果==null){
CharSequence text=“无互联网连接”;
int duration=Toast.LENGTH\u LONG;
Toast Toast=Toast.makeText(MainActivity.this,text,duration);
toast.setGravity(重心垂直,0,0);
toast.show();
}
如果(登录成功==0){
//如果请求不成功
//通过toast向用户发送消息
CharSequence text=“密码或用户错误,请重试”;
int duration=Toast.LENGTH\u LONG;
Toast Toast=Toast.makeText(MainActivity.this,text,duration);
toast.setGravity(重心垂直,0,0);
toast.show();
}
否则{
//在共享首选项中保存令牌
SharedReferences-tokenPref=GetSharedReferences(getString(R.string.preference\u-token),Context.MODE\u-PRIVATE);
SharedReferences.Editor editorToken=tokenPref.edit();
editorToken.putString(getString(R.string.saved_auth_token),result);
editorToken.commit();
//在共享首选项中保存登录状态=1
SharedReferences loginPref=getSharedReferences(getString(R.string.preference\u logged\u in)、Context.MODE\u PRIVATE);
SharedReferences.Editor editorLogin=loginPref.edit();
editorLogin.putString(getString(R.string.saved_login),“1”);
editorLogin.commit();
Intent mapsIntent=新的Intent(getApplicationContext(),MapsActivity.class);
星触觉(MAPSINT);
}
}
}

sdk 23不再支持HttpClient
。您必须使用URLConnection或降级到sdk 22
(编译'com.android.support:appcompat-v7:22.2.0')

如果您需要sdk 23,请将其添加到gradle中:

android {
    useLibrary 'org.apache.http.legacy'
}

HttpClient
在sdk 23中不再受支持。您必须使用URLConnection或降级到sdk 22
(编译'com.android.support:appcompat-v7:22.2.0')

如果您需要sdk 23,请将其添加到gradle中:

android {
    useLibrary 'org.apache.http.legacy'
}

您应该考虑使用HTTP库,internet上有很多HTTP库,其中一些非常易于使用、优化且无错误

例如,截击(由谷歌制作,I
public class Login extends AsyncTask<String, Void, String>{
    private String loginUrl = "http://...";

    private int loginSuccess = 0;

    public String getToken(String fromJson) throws JSONException {
        JSONObject json = new JSONObject(fromJson);


        if(json.has("api_authtoken")) {
            loginSuccess = 1;
            String appToken = json.getString("api_authtoken");
            return appToken;
        }

        else {
            return json.toString();
        }
    }

    public String doInBackground(String... arg0) {

            // so that they can be closed in the finally block.
            HttpURLConnection urlConnection = null;
            BufferedReader reader = null;
            String authToken;

            try {
                // get logged in to get the api_authtoken
                String email = (String) arg0[0];
                String password = (String) arg0[1];

                URL url = new URL(loginUrl);

                // Create the request and open the connection
                urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("POST");
                urlConnection.setRequestProperty("Content-Type", "application/json");
                urlConnection.setRequestProperty("Accept", "application/json");

                urlConnection.setDoOutput(true); //  HERE

                //put values of edittexts into json-Object
                JSONObject data = new JSONObject();
                try {
                    data.put("email", email);
                    data.put("password", password);
                } catch(JSONException e) {
                    Log.e("EXCEPTION", "unexpected JSON exception", e);
                    e.printStackTrace();
                }


            OutputStreamWriter wr = new OutputStreamWriter(urlConnection.getOutputStream());
            wr.write(data.toString());
            wr.flush();

            urlConnection.connect();

            reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String line = null;

            //read server response
            while((line = reader.readLine()) != null) {
                sb.append(line);
            }

            //receive server "answer"
            try {
                return getToken(sb.toString());
            }catch(JSONException e) {
                Log.e("LOG", "unexpected JSON exception", e);
                e.printStackTrace();
            }  finally{
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (final IOException e) {
                        Log.e("MainActivity", "Error closing stream", e);
                    }
                }
            }

            //return sb.toString();
            return null;
        }
        catch(IOException e) {
            Log.e("LoginTask", "Error ", e);
            // If the code didn't successfully get the data, there's no point in attempting
            // to parse it.
            //forecastJsonStr = null;
            return null;
        }
    }

    public void onPostExecute(String result) {
        super.onPostExecute(result);
        //Log.v("RESULT", result);
        if(result == null) {
            CharSequence text = "no internet connection";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(MainActivity.this, text, duration);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.show();
        }

        if(loginSuccess == 0) {
            // if the request wasn't successful
            // give user a message via toast
            CharSequence text = "wrong password or user. please try again";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(MainActivity.this, text, duration);
            toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
            toast.show();
        }

        else {
            // save token in shared preferences
            SharedPreferences tokenPref = getSharedPreferences(getString(R.string.preference_token), Context.MODE_PRIVATE);
            SharedPreferences.Editor editorToken = tokenPref.edit();
            editorToken.putString(getString(R.string.saved_auth_token), result);
            editorToken.commit();

            //save login status = 1 in shared preferences
            SharedPreferences loginPref = getSharedPreferences(getString(R.string.preference_logged_in), Context.MODE_PRIVATE);
            SharedPreferences.Editor editorLogin = loginPref.edit();
            editorLogin.putString(getString(R.string.saved_login), "1");
            editorLogin.commit();

            Intent mapsIntent = new Intent(getApplicationContext(), MapsActivity.class);
            startActivity(mapsIntent);

        }
    }
}