1

Androidチュートリアル(http://developer.android.com/training/basics/firstapp/index.html)を変更して、ユーザーがアプリに入力したテキストを表示する代わりに、入力したURLを読み込んで表示するようにしようとしています。 WebViewで。

これが私のカタログです...

    D/dalvikvm(  401): GC_CONCURRENT freed 431K, 6% free 9693K/10311K, paused 474ms+125ms, total 7912ms
    D/myfirstapp_tag( 1090): Main Line 23
    D/myfirstapp_tag( 1090): Main Line 26
    D/myfirstapp_tag( 1090): Main Line 28
    D/myfirstapp_tag( 1090): Main Line 30
    D/myfirstapp_tag( 1090): Main Line 32
    I/ActivityManager(  150): START {cmp=com.example.myfirstapp/.DisplayMessageActivity (has extras) u=0} from pid 1090
    W/WindowManager(  150): Failure taking screenshot for (246x410) to layer 21015
    I/Choreographer( 1090): Skipped 137 frames!  The application may be doing too much work on its main thread.
    D/myfirstapp_tag( 1090): Line 14
    D/myfirstapp_tag( 1090): Line 16
    D/myfirstapp_tag( 1090): Line 20
    D/myfirstapp_tag( 1090): Line 22
    D/myfirstapp_tag( 1090): Line 32
    D/myfirstapp_tag( 1090): Line 34
    D/AndroidRuntime( 1090): Shutting down VM
    W/dalvikvm( 1090): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
    E/AndroidRuntime( 1090): FATAL EXCEPTION: main
    E/AndroidRuntime( 1090): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example                                  .myfirstapp.DisplayMessageActivity}: java.lang.NullPointerException
    E/AndroidRuntime( 1090):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
    E/AndroidRuntime( 1090):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
    E/AndroidRuntime( 1090):        at android.app.ActivityThread.access$600(ActivityThread.java:130)
    E/AndroidRuntime( 1090):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
    E/AndroidRuntime( 1090):        at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime( 1090):        at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime( 1090):        at android.app.ActivityThread.main(ActivityThread.java:4745)
    E/AndroidRuntime( 1090):        at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime( 1090):        at java.lang.reflect.Method.invoke(Method.java:511)
    E/AndroidRuntime( 1090):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    E/AndroidRuntime( 1090):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    E/AndroidRuntime( 1090):        at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime( 1090): Caused by: java.lang.NullPointerException
    E/AndroidRuntime( 1090):        at com.example.myfirstapp.DisplayMessageActivity.onCreate(DisplayMessageActivity.java:36)
    E/AndroidRuntime( 1090):        at android.app.Activity.performCreate(Activity.java:5008)
    E/AndroidRuntime( 1090):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
    E/AndroidRuntime( 1090):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
    E/AndroidRuntime( 1090):        ... 11 more
    W/ActivityManager(  150):   Force finishing activity com.example.myfirstapp/.DisplayMessageActivity
    W/ActivityManager(  150):   Force finishing activity com.example.myfirstapp/.MainActivity
    W/ActivityManager(  150): Activity pause timeout for ActivityRecord{415e1cc8 com.example.myfirstapp/.DisplayMessageActivity}

私はこれをubuntuでコマンドラインの方法で行っているので、これが私の./AndroidManifest.xmlです

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.example.myfirstapp"
            android:versionCode="1"
            android:versionName="1.0">
            <uses-permission android:name="android.permission.INTERNET" />
            <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
              <activity android:name="MainActivity" android:label="@string/app_name">
                <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
              </activity>
              <activity     android:name=".DisplayMessageActivity" android:label="@string/title_activity_display_message" >
                <meta-data  android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myfirstapp.MainActivity" />
              </activity>
            </application>
    </manifest>

これが私のres/layout/main.xmlです...

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
              <EditText android:id="@+id/edit_message"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:hint="@string/edit_message" />
              <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/button_send"
                android:onClick="sendMessage" />
    </LinearLayout>

...そして私のres/layout / webview.xmlファイル:

    <?xml version="1.0" encoding="utf-8"?>
    <WebView  xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/webview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
    />

2つのソースファイルがあります。これはsrc/com / example / myfirstapp / MainActivity.java

    package com.example.myfirstapp;

    import android.app.Activity;
    import android.view.View;
    import android.content.Intent;
    import android.os.Bundle;
    import android.widget.EditText;
    import android.util.Log;

    public class MainActivity extends Activity {
            public final static String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";

            /** Called when the activity is first created. */
            @Override
            public void onCreate(Bundle savedInstanceState) {
    Log.d ("myfirstapp_tag", "Main Line 15" );
              super.onCreate(savedInstanceState);
    Log.d ("myfirstapp_tag", "Main Line 17" );
              setContentView(R.layout.main);
    Log.d ("myfirstapp_tag", "Main Line 19" );
            }
            /** Called when the user clicks the Send button */
            public void sendMessage(View view) {
    Log.d ("myfirstapp_tag", "Main Line 23" );
              // Do something in response to button
              Intent intent = new Intent(this, com.example.myfirstapp.DisplayMessageActivity.class);
    Log.d ("myfirstapp_tag", "Main Line 26" );
              EditText editText = (EditText) findViewById(R.id.edit_message);
    Log.d ("myfirstapp_tag", "Main Line 28" );
              String message = editText.getText().toString();
    Log.d ("myfirstapp_tag", "Main Line 30" );
              intent.putExtra(EXTRA_MESSAGE, message);
    Log.d ("myfirstapp_tag", "Main Line 32" );
              startActivity(intent);
            }
    }

そしてこれは...src/ com / example / myfirstapp / DisplayMessageActivity.java

    package com.example.myfirstapp;
    import android.app.Activity;
    import android.content.Intent;
    import android.widget.TextView;
    import android.view.View;
    import android.webkit.WebView;
    import android.os.Bundle;
    import android.util.Log;


    public class DisplayMessageActivity extends Activity {
            @Override
            public void onCreate(Bundle savedInstanceState) {
    Log.d ("myfirstapp_tag", "Line 14" );
              super.onCreate(savedInstanceState);
    Log.d ("myfirstapp_tag", "Line 16" );

              // Get the message from the intent
              Intent intent = getIntent();
    Log.d ("myfirstapp_tag", "Line 20" );
              String message = intent.getStringExtra(com.example.myfirstapp.MainActivity.EXTRA_MESSAGE);
    Log.d ("myfirstapp_tag", "Line 22" );

              // Create the text view
    //        TextView textView = new TextView(this);
    //        textView.setTextSize(40);
    //        textView.setText(message);

              // Set the text view as the activity layout
    //        setContentView(textView);
              //WebView webView = new WebView(this); //WebView myWebView = (WebView) findViewById(R.id.webview);
    Log.d ("myfirstapp_tag", "Line 32" );
              WebView webView = (WebView) findViewById(R.id.webview); //webView = (WebView) findViewById(R.id.webview);
    Log.d ("myfirstapp_tag", "Line 34" );
              //setContentView(webView);
              webView.loadUrl(message);
    Log.d ("myfirstapp_tag", "Line 37" );
              setContentView(webView);
    Log.d ("myfirstapp_tag", "Line 39" );
            }
    }

catlogから、次の行がわかります...

    WebView webView = (WebView) findViewById(R.id.webview);

...私のアプリが死にかけているところです。理由がわかりません。誰かが私を助けることができますか:)

4

3 に答える 3

3

setContentView(R.layout.xmlfile);を呼び出す必要があります。この行を呼び出す前に、

 WebView webView = (WebView) findViewById(R.id.webview);

これは、xmlファイルで割り当てたリソースを参照しようとしているためです。

ただし、Androidは、リソースをxmlファイルにマッピングせずにリソースを見つけることはできません。

したがって、xmlファイルを使用してsetContentViewを呼び出す場合にのみ、andoridはその特定のxmlファイルを調べて、WebViewで指定したIDを持つを探しますfindViewByID()。そうでない場合は、NPExceptionが確実に返されます。

または、xmlで割り当てられたリソースを使用したくない場合は、これを実行します。

WebView webView = new WebView(this);
 webView.loadUrl(message);
 setContentView(webView);
于 2012-08-29T07:31:24.740 に答える
2

電話するのを忘れた

setContentView(R.layout.webview);
于 2012-08-29T07:55:25.807 に答える
1

それ以外の

WebView webView = (WebView) findViewById(R.id.webview);

に変更します

WebView webView = new WebView(this);

その後、電話

setContentView(w);

または

your_layout.xml、webviewが含まれている必要があります

この中onCreate()DisplayActivity最初に呼び出す必要があります

setContentView(R.layout.your_layout);

その後、あなたは呼び出すことができます

WebView webView = (WebView) findViewById(R.id.webview);

WebViewこれで、オブジェクトで操作を実行できます

于 2012-08-29T07:32:51.690 に答える