簡體   English   中英

當Webview嘗試從微調器中檢索字符串時,Android應用程序崩潰

[英]Android app crashes when webview tries to retrieve string from spinners

我的應用程序2微調器,基本上是下拉列表,允許用戶選擇值。 Spinner1的下拉菜單中有4個選項,Spinner2的下拉菜單中有5個選項。

如果用戶從spinner1中選擇option1並從spinner2中選擇option1,則項目符號列表[在此應用程序的HTML webapp版本中,我使用li標簽]應該在Web視圖中的其余視圖片段中顯示。該圖像將使事情變得更多明確。 現在,每次我嘗試從兩個微調器中選擇值並單擊Submit時,應用程序崩潰。

我在下面附上代碼

這是針對啟動活動的

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;

public class MyAndroidAppActivity extends Activity {

    private Spinner spinner1, spinner2;
    private Button btnSubmit;

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

        addItemsOnSpinner2();
        addListenerOnButton();
        addListenerOnSpinnerItemSelection();

    }

    //add items into spinner dynamically
    public void addItemsOnSpinner2() {

        spinner2 = (Spinner) findViewById(R.id.spinner2);
        List<String> list = new ArrayList<String>();
        list.add("Equipment");
        list.add("Indications");
        list.add("Illustration");
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner2.setAdapter(dataAdapter);
    }

    public void addListenerOnSpinnerItemSelection(){

        spinner1 = (Spinner) findViewById(R.id.spinner1);
        spinner1.setOnItemSelectedListener(new CustomOnItemSelectedListener());
    }

    //get the selected dropdown list value
    public void addListenerOnButton() {

        spinner1 = (Spinner) findViewById(R.id.spinner1);
        spinner2 = (Spinner) findViewById(R.id.spinner2);

        btnSubmit = (Button) findViewById(R.id.btnSubmit);

        btnSubmit.setOnClickListener(new OnClickListener() {

            /*@Override
            public void onClick(View v) {

                Toast.makeText(MyAndroidAppActivity.this,
                        "OnClickListener : " + 
                        "\nSpinner 1 : " + String.valueOf(spinner1.getSelectedItem()) +
                        "\nSpinner 2 : " + String.valueOf(spinner2.getSelectedItem()),
                        Toast.LENGTH_SHORT).show();
            }*/

             @Override
                public void onClick(View v) {

                     WebViewerFragment wvf = (WebViewerFragment) getFragmentManager().findFragmentById(R.id.webviewfrag);
                       if (wvf != null && wvf.getView() != null) { 
                            wvf.updateWebView(spinner1.getSelectedItemPosition(), spinner2.getSelectedItemPosition());
                       }
                }



        });

    }



}

這是用於webview的方法

import android.R.string;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.AdapterView;
import android.widget.Toast;


public class WebViewerFragment extends Fragment {

    private WebView mWebView;
    // a two dimensional array representing the data to put in the WebView
     String mData[][]= new String[4][5]; 
     {
        for (int i=0;i<4;i++)
        {
            for(int j=0;j<4;j++)
            {
                mData[i][j]="<html><body><h1>Temp1</h1></body></html>";

            }
        }
     }

/*     Toast.makeText(this, mData[i][j],Toast.LENGTH_SHORT);   
*/     



 /*    int[][] a1 = {
              { 1, 2, 3, },
              { 4, 5, 6, },
            };
   {  {},{}};


  */

/*     String SurgEqui="<html><body><h2>Equipment</h2><ul><li><p>IV catheter :Be certain that IV is in place and flushing easily</p></li></body><html>";
*/           







    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View mainView = (View) inflater.inflate(R.layout.frag_layout, container, false);
        mWebView = (WebView) mainView.findViewById(R.id.webView1); 
        return mainView;
    }

    public void updateWebView(int firstSelection, int secondSelection) {
         if (firstSelection == AdapterView.INVALID_POSITION || secondSelection == AdapterView.INVALID_POSITION) {
              return;  
         } else {
              if (mWebView != null) {
                  mWebView.loadData(mData[firstSelection][secondSelection].replace("+", "%20"), "text/html", "utf-8");
                  // mWebView.loadData(mData[firstSelection][secondSelection], "text/html", null);
                   //wv.loadData(URLEncoder.encode(myString).replace("+", "%20"), "text/html, "utf-8");

              }
         }

    }


}

這是布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
     >

    <Button
        android:id="@+id/btnSubmit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_marginTop="101dp"
        android:text="@string/submit" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:entries="@array/country_arrays" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/spinner1" />

    <fragment
        android:id="@+id/webviewfrag"
        android:name="android.webkit.WebViewFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btnSubmit"
        android:layout_marginLeft="246dp"
        android:layout_marginTop="244dp"
       />







    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/btnSubmit" />

</RelativeLayout>

您應該將logcat包含在錯誤中。 但是,我注意到了兩個問題:

  1. 您在addItemsOnSpinner2()中初始化了spinner2,然后在覆蓋了spinner2的地方調用addListenerOnButton()。 這可能是NullPointerException導致的
  2. 您可以在調用addListenerOnButton()之后調用addListenerOnSpinnerItemSelection(),在此您已經引用了在addListenerOnButton()中實例化的spinner1。 那也會給你nullPointerException。 要解決它,請嘗試:

1.刪​​除

spinner1 = (Spinner) findViewById(R.id.spinner1);
spinner2 = (Spinner) findViewById(R.id.spinner2);

從addListenerOnButton()方法開始。

2.在addListenerOnButton()之前調用addListenerOnSpinnerItemSelection():

addListenerOnSpinnerItemSelection();
addListenerOnButton();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM