HTTPGet создает исключение ввода-вывода.У меня есть <использование-разрешение в манифесте - PullRequest
0 голосов
/ 20 декабря 2011

Я пытался сделать HTTPGet и скопировал код из многих предложений, которые я нашел в книгах и на сайтах. Я также нашел этот вопрос на нескольких форумах, и ответ всегда вставлять

    <uses-permission android:name = "android.permission.INTERNET"/>

строка в манифесте. Я вставил эту строку в мой манифест, и она все еще не работает. Строка HttpResponse response = client.execute (request) выдает исключение ввода-вывода. Это происходит в эмуляторе и на моем планшете. Я перепробовал много URL, но в этом примере используется http://www.google.com. Браузеры в эмуляторе и планшете находят этот сайт, поэтому оба имеют подключение к Интернету.

Я включаю свой манифест и код Java.

AndroidManifest.xml 

<?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="the.dave.myhttpget"
  android:versionCode="1"
  android:versionName="1.0">
<uses-sdk android:minSdkVersion="8" />
<uses-permisson android:name="android.permission.INTERNET"/>
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".MyHttpGetActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

</manifest>

MyHttpGetActivity.java

        package the.dave.myhttpget;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MyHttpGetActivity extends Activity {

    private TextView textOut;
    private Button btnGo;
    private EditText editUrl;
    private static final String TAG = "Http";
    private int clickCount = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    textOut = (TextView)findViewById(R.id.textOut);
    btnGo = (Button)findViewById(R.id.btnGo);
    editUrl = (EditText)findViewById(R.id.editURL);

    // load a default url
    editUrl.setText("http://www.google.com");


    btnGo.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View view){HttpGet();}
    });
    }


   private void HttpGet(){
        clickCount++;
        textOut.append("\nClick  " + clickCount);

        BufferedReader in = null;
        try{
            HttpClient client = new DefaultHttpClient();

            String Url= editUrl.getText().toString();
            textOut.append("\nsetting URL to  " + Url);
            HttpGet request = new HttpGet(Url);
            textOut.append("\nURL Done");
            HttpResponse response = client.execute(request);        ///  <---  throws exception.. Why?
            textOut.append("\nHttp response Done");

            in = new BufferedReader
                    (new InputStreamReader(response.getEntity().getContent()));

            StringBuffer sb = new StringBuffer("");
            String line = "";
            textOut.append("\nread lines");
            String NL = System.getProperty("line.sparator");
            while ((line = in.readLine()) != null){
                sb.append(line + NL);
                textOut.append("\n" + line);
                }
            in.close();
            String page = sb.toString();
            textOut.append("\n" + page);

        }  catch (ClientProtocolException e) {
            textOut.append("\nclient " + e.getMessage());

        } catch (IOException e) {
            textOut.append("\nIO exception " + e.getMessage());

        }   finally {

                try{
                    if (in != null) in.close();
                } catch(IOException e){
        }
    }
   }
}

Помогите, пожалуйста

Dave

журнал ошибок

    12-19 23:53:13.187: ERROR/AndroidRuntime(1044): FATAL EXCEPTION: main
12-19 23:53:13.187: ERROR/AndroidRuntime(1044): java.lang.IllegalStateException: Target host must not be null, or set in parameters.
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:561)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at the.dave.myhttpget.MyHttpGetActivity.HttpGet(MyHttpGetActivity.java:69)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at the.dave.myhttpget.MyHttpGetActivity.access$0(MyHttpGetActivity.java:54)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at the.dave.myhttpget.MyHttpGetActivity$1.onClick(MyHttpGetActivity.java:49)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at android.view.View.performClick(View.java:2408)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at android.view.View$PerformClick.run(View.java:8816)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at android.os.Handler.handleCallback(Handler.java:587)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at android.os.Looper.loop(Looper.java:123)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at java.lang.reflect.Method.invokeNative(Native Method)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at java.lang.reflect.Method.invoke(Method.java:521)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-19 23:53:13.187: ERROR/AndroidRuntime(1044):     at dalvik.system.NativeStart.main(Native Method)
12-20 01:28:23.788: ERROR/DefContainer(165): Couldn't copy file: /data/local/tmp/MyHttpGet.apk

1 Ответ

1 голос
/ 21 декабря 2011

Ваш вызов editURL возвращает ноль.

Убедитесь, что вы подтвердили адрес http перед созданием запроса get.

Но стоит отметить, что вывод журнала показывает

Couldn't copy file: /data/local/tmp/MyHttpGet.apk

, что может указывать на то, что что-то застряло, и вам лучше удалить приложение с телефона и выполнить чистую сборку и отладку

...