2017-07-24 89 views
0

我是Android新手。我正在開發一個應用程序。它有一個3 * 3的網格佈局,每個單元格都有一個圖像視圖。我想從一組drawables中隨機設置圖像資源。我爲每一個使用.setImageResource(),但是當我運行應用程序時,它崩潰了。android中設置ImageView資源出錯

以下是來自log cat的錯誤消息。

這裏是我的XML和Java代碼。

activity_game.xml

<GridLayout 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" 
    tools:context="com.example.leila.makesquare.GameActivity" 
    android:rowCount="3" 
    android:columnCount="3"> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="0" 
    android:layout_column="0" 
    android:gravity="fill" 
    android:layout_marginLeft="20dp" 
    android:layout_marginTop="100dp"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView0"/> 

</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="0" 
    android:layout_column="1" 
    android:gravity="fill" 
    android:layout_marginTop="100dp"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView1" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="0" 
    android:layout_column="2" 
    android:gravity="fill" 
    android:layout_marginTop="100dp"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView2" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="1" 
    android:layout_column="0" 
    android:gravity="fill" 
    android:layout_marginLeft="20dp"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView3" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="1" 
    android:layout_column="1" 
    android:gravity="fill"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView4" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="1" 
    android:layout_column="2" 
    android:gravity="fill"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView5" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="2" 
    android:layout_column="0" 
    android:gravity="fill" 
    android:layout_marginLeft="20dp"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView6" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="2" 
    android:layout_column="1" 
    android:gravity="fill"> 

      <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView7" /> 
</LinearLayout> 

<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="2" 
    android:layout_column="2" 
    android:gravity="fill"> 

     <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView8" /> 
    </LinearLayout> 
</GridLayout> 

GameActivity.java

package com.example.leila.makesquare; 

import android.support.v7.app.ActionBarActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ImageView; 

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Collections; 
import java.util.List; 

public class GameActivity extends ActionBarActivity { 

    int[] squares=new int[] 
    { 
      R.drawable.brgy, 
      R.drawable.bygr, 
      R.drawable.bygr2, 
      R.drawable.gbry, 
      R.drawable.gyrb, 
      R.drawable.gyrb2, 
      R.drawable.rbyg, 
      R.drawable.rgby, 
      R.drawable.rybg 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 

     ArrayList<Integer> jj=new ArrayList<Integer>(); 
     for (int i=0;i<9;i++) { 
      jj.add(i); 
     } 

     Collections.shuffle(jj); 

     ImageView imageView0=(ImageView)findViewById(R.id.imageView0); 
     ImageView imageView1=(ImageView)findViewById(R.id.imageView1); 
     ImageView imageView2=(ImageView)findViewById(R.id.imageView2); 
     ImageView imageView3=(ImageView)findViewById(R.id.imageView3); 
     ImageView imageView4=(ImageView)findViewById(R.id.imageView4); 
     ImageView imageView5=(ImageView)findViewById(R.id.imageView5); 
     ImageView imageView6=(ImageView)findViewById(R.id.imageView6); 
     ImageView imageView7=(ImageView)findViewById(R.id.imageView7); 
     ImageView imageView8=(ImageView)findViewById(R.id.imageView8); 


     int q0=squares[jj.get(0)]; 
     int q1=squares[jj.get(1)]; 
     int q2=squares[jj.get(2)]; 
     int q3=squares[jj.get(3)]; 
     int q4=squares[jj.get(4)]; 
     int q5=squares[jj.get(5)]; 
     int q6=squares[jj.get(6)]; 
     int q7=squares[jj.get(7)]; 
     int q8=squares[jj.get(8)]; 

     imageView0.setImageResource(q0); 
     imageView1.setImageResource(q1); 
     imageView2.setImageResource(q2); 
     imageView3.setImageResource(q3); 
     imageView4.setImageResource(q4); 
     imageView5.setImageResource(q5); 
     imageView6.setImageResource(q6); 
     imageView7.setImageResource(q7); 
     imageView8.setImageResource(q8); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_game, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+3

從日誌中添加崩潰日誌cat –

+2

這是一個非常普通的代碼。它可能會更好,如果你挖掘谷歌_GridLayout_例如 – Piyush

+0

而這段代碼是bizzare。如果你反正硬編碼0-9無處不在,你不需要jj數組。你甚至不需要q0-q8,因爲你可以直接使用imageView0.setImageResource中的方塊[0](方塊[0])。 –

回答

1

我想原因是你的第五線性佈局缺少一個右尖括號:

<LinearLayout 
android:orientation="vertical" 
android:layout_width="110dp" 
android:layout_height="110dp" 
android:layout_row="1" 
android:layout_column="1" 
android:gravity="fill" 
+2

這可能不是問題。 – Piyush

+0

這是一個打字錯誤,主碼是正確的 –

0
Here You have not close ImageView closing bracket i.e. "/>" 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="0" 
    android:layout_column="0" 
    android:gravity="fill" 
    android:layout_marginLeft="20dp" 
    android:layout_marginTop="100dp"> 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView0" 

</LinearLayout> 
And here you have not close Linear Layout closing bracket i.e. "/>" 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="110dp" 
    android:layout_height="110dp" 
    android:layout_row="1" 
    android:layout_column="1" 
    android:gravity="fill" 

    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/imageView4" /> 
</LinearLayout> 
+0

我不明白,所有的線性佈局和圖像視圖打開/關閉括號是一樣的 –

+0

這不是一個答案! – Piyush

0

您的ImageView標籤未關閉。嘗試

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/imageView0"/> 

並嘗試給我們的日誌

[編輯] 作爲從編輯你的活動代碼是非常糟糕的,嘗試閱讀更多關於GridView的,並在Java和Android的編碼實踐,以提高你的代碼和編碼技能。

+0

這不是一個答案! – Piyush