2017-07-24 74 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