2017-08-29 51 views
0

我有问题将TextView更改为ListView。最初,该应用程序有一个按钮,单击时,将测试运行到蓝牙设备,并在textview中显示结果。我修改了应用程序,使其包含两个包含最后文本结果的文本视图和一个单独的xml文件(与viewflipper连接),以转到包含所有测试结果的第二个文本视图,直到用户通过单击按钮清除文本视图。我注视着this example一起,并检查了我的代码中的一个ArrayAdapter部分被侵入,然后它似乎是根据developer's guide需要什么,但我仍然得到了自己的错误:可以ListView的主机TextView项目也显示在一个单独的TextView

无法解析构造“ArrayAdapter(COM .example.android.stardustscanner.ScannerFragment,int,int,java.lang.String)'

为什么我得到这个错误?

我正在进行所有更改的我的.java文件非常长,并且包含很多与此问题无关并且不适合在问题框中的问题,因此我只会尝试包括相关部分。该错误是朝着这一行底部: ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.fragment_bluetooth_scanner, R.id.textView, saveData);

ScannerFragment.java

public class ScannerFragment extends Fragment implements LocationListener { 

    ListView mListView; 




    //page switching things KG 8/24/17 
    private ViewFlipper mViewFlipper; 
    private float lastX; 
    private Button mViewLog; 
    private Button mReturnFlipper; 
    private TextView mShowData; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 



    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
          @Nullable Bundle savedInstanceState) { 

     return inflater.inflate(R.layout.flipper_holder, container, false);//kg 8/24/17 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     SP = PreferenceManager.getDefaultSharedPreferences(getContext()); 

     mViewFlipper = (ViewFlipper) view.findViewById(R.id.viewFlip); //KG 8/24/17 
     mViewLog = (Button) view.findViewById(R.id.viewLog); //kg 8/24/17 
     mReturnFlipper = (Button) view.findViewById(R.id.flipperReturn); //kg 8/24/17 
     mShowData = (TextView) view.findViewById(R.id.textView) ; //kg 8/25/2017 
     mShowData.setText(readFromFile()); // kg 8/25/2017 

     mPowerOffButton = (Button) view.findViewById(R.id.button_poweroff); 
     mDisconnectButton = (Button) view.findViewById(R.id.button_disconnect); 
     mConnectButton = (Button) view.findViewById(R.id.button_connect); 
     mPresence = (Button) view.findViewById(R.id.button_present); 

     mBattery = (ProgressBar) view.findViewById(R.id.progressBar); 

     mBlinkConnect = (Button) view.findViewById(R.id.button_connectionblink); 
     mBlinkData = (Button) view.findViewById(R.id.button_communication); 
     mClearLog = (Button) view.findViewById(R.id.button_clear_log); 

     mDeviceName = (Button) view.findViewById(R.id.button_devicename); 
     mDeviceSN = (Button) view.findViewById(R.id.button_devicesn); 
     mBatteryPerc = (TextView) view.findViewById(R.id.label_batterypct); 

     mListView = (ListView) view.findViewById(R.id.scanLogView); //kg 8/28/17 

     // mReadingLog = (TextView) view.findViewById(R.id.scanLogView); 
     mReadingLog.setMovementMethod(new ScrollingMovementMethod()); 
     mReadingLog.setText(readFromFile()); 

     telephonyManager = (TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE); 

     initLocationService(this.getContext()); 

     final ActionBar actionBar = getActivity().getActionBar(); 
     if (null == actionBar) { 
      return; 
     } 
     final Drawable D = getResources().getDrawable(R.drawable.stardust2); 
     actionBar.setBackgroundDrawable(D); 
     actionBar.setTitle(""); 

     //KG 8/24/17 
     mViewLog.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       mViewFlipper.showNext(); 
      } 
     }); 

     mReturnFlipper.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View view){ 
       mViewFlipper.showPrevious(); 
      } 
     }); 

    } 

    private void setupScanner() { 
     Log.d(TAG, "setupScanner()"); 

     // Initialize the send button with a listener that for click events 
     mPowerOffButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       if(isIris) { 
        publishMessage(Constants.COMMAND_POWEROFF_IRIS); 
       } else { 
        publishMessage(Constants.COMMAND_POWEROFF); 
       } 
       mScannerService.stop(); 
      } 
     }); 

     // Initialize the send button with a listener that for click events 
     mDisconnectButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Send a message using content of the edit text widget 
       publishMessage(Constants.COMMAND_DISCONNECT); 
       mScannerService.stop(); 
      } 
     }); 

     // Initialize the send button with a listener that for click events 
     mConnectButton.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Send a message using content of the edit text widget 
       publishMessage(Constants.COMMAND_ON_CONNECT); 
      } 
     }); 

     mClearLog.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       // Send a message using content of the edit text widget 
       mReadingLog.setText(""); 
       if(SP.getBoolean("writeToFile", true)) { 
        writeToFile("", "", false); 
       } 
      } 
     }); 


     // Initialize the ScannerService to perform bluetooth connections 
     mScannerService = new ScannerService(getActivity(), mHandler); 
    } 

    private TextView.OnEditorActionListener mWriteListener 
      = new TextView.OnEditorActionListener() { 
     public boolean onEditorAction(TextView view, int actionId, KeyEvent event) { 
      // If the action is a key-up event on the return key, send the message 
      if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_UP) { 
       String message = view.getText().toString(); 
       publishMessage(message); 
      } 
      return true; 
     } 
    }; 


    private final Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      FragmentActivity activity = getActivity(); 
      switch (msg.what) { 
       case Constants.MESSAGE_STATE_CHANGE: 
        switch (msg.arg1) { 
         case ScannerService.STATE_CONNECTED: 
          setStatus(mConnectedDeviceName); 

          if(mConnectedDeviceName.substring(0, 4).toLowerCase().equals("iris") || mConnectedDeviceName.substring(0, 8).toLowerCase().equals("stardust")) { 
           isIris = true; 

           mPresence.setClickable(true); 
           mPresence.setText("Click to detect taggant"); 
           mPresence.setBackgroundColor(Color.parseColor("#0061ff")); 

           mPresence.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View v) { 
             readoutStarted = true; 
             publishMessage(Constants.COMMAND_RUN_IRIS); 
            } 
           }); 

           mPowerOffButton.setOnClickListener(new View.OnClickListener() { 
            public void onClick(View v) { 
             publishMessage(Constants.COMMAND_POWEROFF_IRIS); 
             mScannerService.stop(); 
            } 
           }); 
          } else { 
           isIris = false; 
          } 

          if(!isIris) { 
           mPresence.setClickable(false); 
           mPresence.setText("NO TAGGANT DETECTED"); 
           mPresence.setBackgroundColor(Color.parseColor("#ffc4ab")); 

           publishMessage(Constants.COMMAND_ON_CONNECT); 

           timer = new Timer(); 
           timerStarted = true; 
           timer.scheduleAtFixedRate(new TimerTask() { 

            synchronized public void run() { 
             publishMessage(Constants.COMMAND_READDATA); 
            } 

           }, 1000, 1000); 
          } else { 
           if(timerStarted) { 
            timer.cancel(); 
            timer.purge(); 
            timerStarted = false; 
           } 
          } 
          mBlinkConnect.setBackgroundColor(Color.parseColor("#11D901")); 
          break; 
         case ScannerService.STATE_CONNECTING: 
          setStatus("C"); 
          break; 
         case ScannerService.STATE_LISTEN: 
         case ScannerService.STATE_NONE: 
          mBlinkConnect.setBackgroundColor(Color.parseColor("#ff2b0f")); 
          mBlinkData.setBackgroundColor(Color.parseColor("#CCCCCC")); 
          if(timerStarted) { 
           timer.cancel(); 
           timer.purge(); 
           timerStarted = false; 
          } 
          setStatus("D"); 
          break; 
        } 
        break; 
       case Constants.MESSAGE_WRITE: 
        mBlinkData.setBackgroundColor(Color.parseColor("#CCCCCC")); 

        break; 
       case Constants.MESSAGE_READ: 
        mBlinkData.setBackgroundColor(Color.parseColor("#0091FA")); 

        String readMessage = (String)msg.obj; 

        if(isIris) { 
         readIris(readMessage); 
        } else { 
         readNormal(readMessage); 
        } 

        break; 
       case Constants.MESSAGE_DEVICE_NAME: 
        // save the connected device's name 
        mConnectedDeviceName = msg.getData().getString(Constants.DEVICE_NAME); 
        if (null != activity) { 
         Toast.makeText(activity, "Connected to " 
           + mConnectedDeviceName, Toast.LENGTH_SHORT).show(); 
        } 
        break; 
       case Constants.MESSAGE_TOAST: 
        if (null != activity) { 
         Toast.makeText(activity, msg.getData().getString(Constants.TOAST), 
           Toast.LENGTH_SHORT).show(); 
        } 
        break; 
      } 
     } 
    }; 

    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch (requestCode) { 
      case REQUEST_CONNECT_DEVICE_SECURE: 
       // When DeviceListActivity returns with a device to connect 
       if (resultCode == Activity.RESULT_OK) { 
        connectDevice(data, true); 
       } 
       break; 
      case REQUEST_CONNECT_DEVICE_INSECURE: 
       // When DeviceListActivity returns with a device to connect 
       if (resultCode == Activity.RESULT_OK) { 
        connectDevice(data, false); 
       } 
       break; 
      case REQUEST_ENABLE_BT: 
       // When the request to enable Bluetooth returns 
       if (resultCode == Activity.RESULT_OK) { 
        // Bluetooth is now enabled, so set up a session 
        setupScanner(); 
       } else { 
        // User did not enable Bluetooth or an error occurred 
        Log.d(TAG, "BT not enabled"); 
        Toast.makeText(getActivity(), R.string.bt_not_enabled_leaving, 
          Toast.LENGTH_SHORT).show(); 
        getActivity().finish(); 
       } 
     } 
    } 





    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.secure_connect_scan: { 
       // Launch the DeviceListActivity to see devices and do scan 
       Intent serverIntent = new Intent(getActivity(), DeviceListActivity.class); 
       startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_SECURE); 
       return true; 
      } 
      /*case R.id.insecure_connect_scan: { 
       // Launch the DeviceListActivity to see devices and do scan 
       Intent serverIntent = new Intent(getActivity(), DeviceListActivity.class); 
       startActivityForResult(serverIntent, REQUEST_CONNECT_DEVICE_INSECURE); 
       return true; 
      }*/ 
      case R.id.settings_button: { 
       Intent serverIntent = new Intent(getActivity(), SettingsActivity.class); 
       startActivityForResult(serverIntent, REQUEST_SHOW_SETTINGS); 
       return true; 
      } 
     } 
     return false; 
    } 

    /** 
    * 
    * @param data String 
    * @param append boolean 
    */ 
    private void writeToFile(String data, String uploadData, boolean append) { 
     String root = Environment 
       .getExternalStorageDirectory().toString(); 
     File myDir = new File(root); 
     String fname = "starDust.txt"; 
     String fname2 = "starDust.csv"; 
     File file = new File (myDir, fname); 
     File file2 = new File (myDir, fname2); 
     //if (file.exists()) file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file, append); 
      out.write(data.getBytes(), 0, data.getBytes().length); 
      out.flush(); 
      out.close(); 

      FileOutputStream out2 = new FileOutputStream(file2, append); 
      out2.write(uploadData.getBytes(), 0, uploadData.getBytes().length); 
      out2.flush(); 
      out2.close(); 

      if(mConnectedDeviceName != null) { 
       Log.d(TAG, "Connecting " + SP.getString("server_ip", "") + SP.getString("server_username", "") + SP.getString("server_password", "")); 
       new FTPUploadTask().execute(mConnectedDeviceName, SP.getString("server_ip", ""), SP.getString("server_username", "") , SP.getString("server_password", "")); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * 
    */ 
    private String readFromFile() { 
     String root = Environment 
       .getExternalStorageDirectory().toString(); 
     File myDir = new File(root); 
     String fname = "starDust.txt"; 
     File file = new File (myDir, fname); 
     StringBuilder text = new StringBuilder(); 

     if (file.exists()) { 
      try { 
       BufferedReader br = new BufferedReader(new FileReader(file)); 
       String line; 

       while ((line = br.readLine()) != null) { 
        text.insert(0, line + System.getProperty("line.separator")); 
       } 
       br.close(); 
      } catch (Exception e) { 

      } 
     } 

     return text.toString(); 

    } 


    private void readNormal(String readMessage) { 
     String parsedData[]; 

     if(readMessage.contains(";")) { 

      if(readMessage.equals(";")) { 
       parsedData = bufferedMessage.trim().split(","); 
       bufferedMessage = ""; 
      } else { 
       String partialMessage[] = readMessage.split(";"); 
       bufferedMessage += partialMessage[0]; 
       parsedData = bufferedMessage.trim().split(","); 

       if (partialMessage.length > 1) { 
        bufferedMessage = partialMessage[1]; 
       } else { 
        bufferedMessage = ""; 
       } 
      } 
     } else { 
      bufferedMessage += readMessage.trim(); 
      return; 
     } 

     if(parsedData.length == RESPONSE_SIZE && parsedData[0].equals("U")) { 
      if(parsedData[1].matches("[-+]?\\d*\\.?\\d+")) { 
       if(Integer.parseInt(parsedData[1]) > maxU1 || hitTrigger) { 
        maxU1 = Integer.parseInt(parsedData[1]); 
       } 
      } 
      if(parsedData[2].matches("[-+]?\\d*\\.?\\d+")) { 
       if(Integer.parseInt(parsedData[2]) > maxU2 || hitTrigger) { 
        maxU2 = Integer.parseInt(parsedData[2]); 
       } 
      } 
      if(parsedData[3].matches("[-+]?\\d*\\.?\\d+")) { 
       if(Integer.parseInt(parsedData[3]) > maxU3 || hitTrigger) { 
        maxU3 = Integer.parseInt(parsedData[3]); 
       } 
      } 

      double u1val = Double.parseDouble(parsedData[1]); 
      double u2val = Double.parseDouble(parsedData[2]); 
      double u1u2div = 0; 

      if(u2val > 0) { 
       u1u2div = ((u1val/u2val) * KFactor); 
      } 

      if(parsedData[4].matches("[-+]?\\d*\\.?\\d+")) { 
       mBatteryPerc.setText(parsedData[4] + "%"); 
       mBattery.setProgress(Integer.parseInt(parsedData[4])); 
      } 
     } 

     taggantType = 0; 

     if(maxU1 > Integer.parseInt(SP.getString("maxThreshold", Integer.toString(MAX_TRIGGER)))) { 
      taggantType += 4; 
     } else { 
      taggantType += 0; 
     } 

     if(maxU2 > Integer.parseInt(SP.getString("maxThreshold", Integer.toString(MAX_TRIGGER)))) { 
      taggantType += 2; 
     } else { 
      taggantType += 0; 
     } 

     if(maxU3 > Integer.parseInt(SP.getString("maxThreshold", Integer.toString(MAX_TRIGGER)))) { 
      taggantType += 1; 
     } else { 
      taggantType += 0; 
     } 

     Log.d(TAG, Integer.toString(taggantType)); 
     Log.d(TAG, Boolean.toString(hitTrigger)); 
     Log.d(TAG, bufferedMessage); 

     // Check if hit threshold, if so hitTrigger is enabled. 
     if(taggantType > 0) { 
      savedTaggantType = taggantType; 
      hitTrigger = true; 
      mPresence.setText("VALID TAGGANT DETECTED"); 
      mPresence.setBackgroundColor(Color.parseColor("#11D901")); 
     } else if(taggantType == 0 && hitTrigger) { 
      hitTrigger = false; 
      mPresence.setText("NO TAGGANT DETECTED"); 
      mPresence.setBackgroundColor(Color.parseColor("#ffc4ab")); 

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      String currentDateandTime = sdf.format(new Date()); 
      String saveData = 
        "Device: " + mConnectedDeviceName + 
          System.getProperty("line.separator") + 
          "Timestamp: " + currentDateandTime + 
          System.getProperty("line.separator") + 
          "Location: " + latitude + " (lat)/" + longitude + " (lon)" + 
          System.getProperty("line.separator") + 
          "Taggan Type: N" + Integer.toString(savedTaggantType) + 
          System.getProperty("line.separator") + 
          "Phone id: " + telephonyManager.getDeviceId() + 
          System.getProperty("line.separator") + 
          "=========================" + 
          System.getProperty("line.separator"); 

      String csvData = mConnectedDeviceName + "," + 
        currentDateandTime + "," + 
        "\"http://maps.google.com/?q=" + latitude + "," + longitude + "\"," + 
        "N" + Integer.toString(savedTaggantType) + "," + 
        "\"" + telephonyManager.getDeviceId() + "\"" + 
        System.getProperty("line.separator"); 

      mReadingLog.setText(saveData + mReadingLog.getText()); 
      mShowData.setText(saveData); //kg 8/25/17 

      maxU1 = 0; 
      maxU2 = 0; 
      maxU3 = 0; 
      savedTaggantType = 0; 

      if(SP.getBoolean("writeToFile", true)) { 
       writeToFile(saveData, csvData, true); 
      } 
     } 

    } 

    /** 
    * @param readMessage String 
    */ 
    public void readIris(String readMessage) { 
     if(!readoutStarted) { 
      return; 
     } 

     String parsedData[]; 

     if(readMessage.contains(";")) { 
      readoutStarted = false; 
      if(readMessage.equals(";")) { 
       parsedData = bufferedMessage.replaceAll("\n", "").replaceAll(" +", " ").trim().split("\\*"); 
       bufferedMessage = ""; 
      } else { 
       String partialMessage[] = readMessage.replaceAll("\n", "").replaceAll(" +", " ").trim().split(";"); 
       bufferedMessage += partialMessage[0].trim(); 
       parsedData = bufferedMessage.replaceAll("\n", "").replaceAll(" +", " ").trim().split("\\*"); 
       bufferedMessage = ""; 
      } 
     } else { 
      bufferedMessage += readMessage.trim().replaceAll("\n", "").replaceAll(" +", " "); 
      return; 
     } 

     Log.d(TAG, Arrays.toString(parsedData)); 

     boolean passed = false; 
     int v1 = 0; 
     int v2 = 0; 
     if(parsedData[3].equals("S")) { 
      passed = true; 
      String values[] = parsedData[7].split("\\s+"); 
      v1 = Integer.parseInt(values[0].replaceAll("[\\D]", "")); 
      v2 = Integer.parseInt(values[values.length-1]); 
     } else { 
      Log.d(TAG, Arrays.toString(parsedData)); 
      String values[] = parsedData[5].split("\\s+"); 
      v1 = Integer.parseInt(values[0].replaceAll("[\\D]", "")); 
      v2 = Integer.parseInt(values[values.length-1]); 
     } 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     String currentDateandTime = sdf.format(new Date()); 
     String saveData = 
       "Device: " + mConnectedDeviceName + 
         System.getProperty("line.separator") + 
         "Timestamp: " + currentDateandTime + 
         System.getProperty("line.separator") + 
         "Location: " + latitude + " (lat)/" + longitude + " (lon)" + 
         System.getProperty("line.separator") + 
         "Phone id: " + telephonyManager.getDeviceId() + 
         System.getProperty("line.separator") + 
         "Valid:" + (passed ? "YES" : "NO") + 
         System.getProperty("line.separator") + 
         "Values: " + "T" + v1 + "/" + v2 + 
         System.getProperty("line.separator") + 
         "=========================" + 
         System.getProperty("line.separator"); 

     String csvData = mConnectedDeviceName + "," + 
       currentDateandTime + "," + 
       "\"http://maps.google.com/?q=" + latitude + "," + longitude + "\"," + 
       "Valid: " + (passed ? "YES" : "NO") + " - " + "T" + v1 + "/" + v2 + Integer.toString(savedTaggantType) + "," + 
       "\"" + telephonyManager.getDeviceId() + "\"" + 
       System.getProperty("line.separator"); 

     ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.fragment_bluetooth_scanner, R.id.textView, saveData); 
     mListView.setAdapter(arrayAdapter); 
     mReadingLog.setText(saveData + mReadingLog.getText()); 
     mShowData.setText(saveData); //kg 8/25/17 

     if(SP.getBoolean("writeToFile", true)) { 
      writeToFile(saveData, csvData, true); 
     } 
    } 
} 

我有这个问题相关的三个XML文件,但由于空间我只包括包含在一个ListView并删除其他按钮。

view_list.xml contains the ListView: 

    <?xml version="1.0" encoding="utf-8"?> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:id="@+id/viewList" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center_horizontal" 
      android:paddingLeft="4dp" 
      android:paddingRight="4dp" 
      android:visibility="visible"> 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:id="@+id/listview_holder" 
        android:layout_alignParentTop="true" 
        android:layout_alignTop="@id/button_holder" 
        android:layout_weight=".1" 
        android:layout_height="wrap_content"> 


        <ListView 
         android:id="@+id/scanLogView" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:layout_gravity="center_horizontal" 
         android:maxLines="4096" 
         android:scrollbars="vertical" 
         android:text="@string/app_name" 
         android:textAppearance="?android:attr/textAppearanceSmall"/> 

       </LinearLayout> 

     </RelativeLayout> 


    </LinearLayout> 
+0

可以显示fragment_bluetooth_scanner.xml吗? –

+0

@NguyễnTrungHiếu对不起,我早点回复,但由于某种原因,它没有发布。我无法在问题框中填入更多字符。我想出了ArrayAdapter的错误,特定于'this',我做了更改,并且没有构建错误,但现在只添加了一个项目。我不确定发生了什么,但我为这个问题开了一个新问题。 –

回答

0

错误与ArrayAdapter。我改变了decloration从

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, 
R.layout.fragment_bluetooth_scanner, R.id.textView, saveData); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
android.R.layout.simple_list_item_1, android.R.id.text1, listItems); 

现在生成项目,并显示列表视图。

相关问题